﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MS.InformationManagement.Presenter.Support;
using System.Web.UI;
using Microsoft.SharePoint;
using MS.InformationManagement.BLL.TaxonomyTerms;
using MS.InformationManagement.Support.Constants;
using MS.InformationManagement.Core.Support;
using MS.InformationManagement.DAL.DocumentCenter;
using MS.InformationManagement.Support;
using Microsoft.SharePoint.Taxonomy;

namespace MS.InformationManagement.Presenter.InsertarRadicadoSalida
{
    public class InsertarRadicadoSalidaPresenter : BasePresenter<IInsertarRadicadoSalidaView>
    {
        #region Constructors

        public InsertarRadicadoSalidaPresenter(IInsertarRadicadoSalidaView view) : base(view) { }

        #endregion

        #region Methods

        public void HandleAssociatedRadicado()
        {
            View.AssociatedRadicadosData = new List<Radicado>();
            View.AssociatedRadicadosData.Add(RadicadosHelper.GetRadicadoById(View.AssociatedRadicados[0]));
            if (!string.IsNullOrEmpty(View.AssociatedRadicadosData[0].NúmeroExpediente))
                View.SubjectExpediente = View.AssociatedRadicadosData[0].NúmeroExpediente;
            View.LoadForAnexo();
        }

        public void HandleLoad()
        {
            //View.UsaConCopia = ConfigurationHelper.GetInstance().ConfigItems[GlobalConstants.USA_CON_COPIA];
            View.UsaConCopia = Convert.ToBoolean(ConfigurationHelper.GetInstance().ConfigItems[GlobalConstants.USA_CON_COPIA]);

            MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida bllObject = new BLL.InsertarRadicadoSalida.InsertarRadicadoSalida();
            View.Tipos = bllObject.GetTipoRadicado();
            View.Modos = bllObject.GetModoRecepcionSalida();
            View.MediosDeEnvio = MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida.LoadMediosDeEnvio();
            View.DepartamentoUsuarioActual = MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida.getDepartmentCurrentUser();

            if (View.CurrentId.HasValue)
            {

                View.Radicado_Empresa = bllObject.GetRadicadoEmpresaSalida(View.CurrentId.Value, View.CurrentList);
                if (View.Radicado_Empresa != null) { View.RemitenteID = View.Radicado_Empresa.Nit; }
                View.Radicado_Persona = bllObject.GetRadicadoPersonaSalida(View.CurrentId.Value, View.CurrentList);
                if (View.Radicado_Persona != null) { View.RemitenteID = View.Radicado_Persona.Cédula; }
            }
            else {
                bool autoSelectLocation = Convert.ToBoolean(ConfigurationHelper.GetInstance().ConfigItems[GlobalConstants.AUTOSELECCIONAR_UBICACION]);
                if (autoSelectLocation)
                {
                    string cityName = ConfigurationHelper.GetInstance().ConfigItems[GlobalConstants.AUTOSELECCIONAR_UBICACION_VALOR];
                    TaxonomyFieldValue autoSelectCity = TermStoreHelper.GetTaxonomyFieldByTerm(GlobalConstants.METADATA_GROUP_NAME, GlobalConstants.METADATA_TERM_COUNTRY, cityName, true);
                    View.Country = autoSelectCity;
                }
            }

            View.Show();

            //if (string.IsNullOrEmpty(View.Strategy)) { View.LoadDependencyForCurrentUser(); }
 
        }

        public void LoadRemitente()
        {
            MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida bllObject = new BLL.InsertarRadicadoSalida.InsertarRadicadoSalida();
            View.remitente = bllObject.GetSender(View.RemitenteID);
            View.LoadRemitente();
        }

        public void HandleSave()
        {
            if (View.Radicado_Empresa != null)
            {
                if (View.AssociatedRadicados == null && string.IsNullOrEmpty(View.AssociatedAction))
                    View.OperationResponse = new MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida().SaveRadicadoEmpresaSalida(View.Radicado_Empresa);
                else
                    View.OperationResponse = MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida.CreateRadicadoWithAssocitedAction(View.AssociatedAction, View.Radicado_Empresa, View.AssociatedRadicados, View.SubjectExpediente);
     
                View.RadicadoGenerated();
            }
            else
            {
                if (View.AssociatedRadicados == null && string.IsNullOrEmpty(View.AssociatedAction))
                    View.OperationResponse = new MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida().SaveRadicadoPersonaSalida(View.Radicado_Persona);
                else
                    View.OperationResponse = MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida.CreateRadicadoWithAssocitedAction(View.AssociatedAction, View.Radicado_Persona, View.AssociatedRadicados, View.SubjectExpediente);

                View.RadicadoGenerated();
            }
        }

        public void HandleUpdate()
        {
            if (View.Radicado_Empresa != null)
            {
                new MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida().UpdateRadicadoEmpresaSalida(View.Radicado_Empresa);
            }
            else
            {
                new MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida().UpdateRadicadoPersonaSalida(View.Radicado_Persona);
            }
            View.RadicadoUpdated();
        }

        public void HandleLoadPostback()
        {
            MS.InformationManagement.BLL.InsertarRadicadoSalida.InsertarRadicadoSalida bllObject = new BLL.InsertarRadicadoSalida.InsertarRadicadoSalida();
            if (View.CurrentId.HasValue)
            {
                SPListItem item;
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite ElevatedsiteColl = new SPSite(SPContext.Current.Site.ID))
                    {
                        using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())
                        {
                            item = ElevatedSite.Lists[View.CurrentList].GetItemById(int.Parse(View.CurrentId.ToString()));
                            string value = item[CustomSiteColumns.FIELD_DOCSET_UNIQUE_ID].ToString();
                            View.childRadicados = bllObject.getChildFromRadicado(ElevatedSite.Lists[View.CurrentList], item[CustomSiteColumns.FIELD_DOCSET_UNIQUE_ID].ToString());
                        }
                    }
                });
               
            }

            View.ShowPostBack();
        }

        #endregion
    }
}
